git 实操

本文共 1,128 字 预计花费 4 分钟

工作中一直用 svn ,用久了之后感觉还是存在一些说不出来的不方便。以前一直想要接触一下 git 但总是因为没有项目可以实践。直到有一天突然想到可以将博文托管到 github 上啊,这样不就拥有了项目并且可以实践了吗,于是也就有了下面这篇连载文章,不定期更新~

官方文档是个好东西,一定要利用起来

准备要托管的文件

可以是项目代码,也可以是文本、图片任何类型文件。我这里就是几篇博文(markdown 格式)

0-1 项目文件

初始化一个 git 项目

这里有两种方法:

  • github 上直接通过图形化界面引导新建一个 repository

  • 通过 commd line 的方式在相应的项目文件夹下进行初始化。

第一种方式的具体过程如下:

  • 打开 github 上的个人主页, 点击 New repository 按钮。按照指导建立新仓库。

  • New reporsitoy

  • 确认创建 repository

  • 最够使用 git clone 的方式克隆项目到本地

    git clone 克隆项目到本地

下面使用第二种方式:

纯命令行的方式,这种方式的思路其实和第一种是相反的。

第一种是通过可视化的方式在远程建立好代码仓库,再克隆到本地的时候就不需要再手动初始化了;

第二种方式则是先在本地初始化好 git 项目,然后后通过命令行的 git 指令 与远程的仓库进行链接,前提也还是要有一个空的仓库。

以前觉得图形化的方式很方便快捷,但是现在觉得纯命令行的方式使用起来更有成就感。

具体步骤如下:

  • 进入需要存储项目的目录下,右键呼出 bash 命令行窗口。

    1
    2
    3
    4
    git init 项目名

    e.g.
    git init blog-demo

    git init

现在只是本地创建好了 git 项目,还需要和远程的仓库建立起链接才能将代码 push(推送) 到远程仓库。

注:这里有一个警告,当第一次建立链接后但还没有进行第一次 pull 操作前,如果对远程仓库链接进行了 git remote rename <oldname> <newname> 的重命名操作pull 的操作会出现 non-fast-forward 的错误。(暂无解决方案…)

git remote add 将本地代码与远程仓库建立链接

  • 使用 git remote -v 查看远程状态

通过以上的操作,已经建立起了本地和远程仓库的链接,为下面的文件互相推送构建了基础。

pull 拉取远程仓库到本地

git pull origin master 上面新建的远程仓库只包含一个 README.md 文件,执行过这条指令过后本地仓库就与远程仓库状态同步。

git pull 拉取远程数据

相似的操作还有 git clone, git fetch, git merge 暂时不详细描述。相关参考

提交

git 的提交和 svn 的提交差别很大,这是由他俩原理决定的。
`
(未完,后期补)

添加 .gitignore 文件

.gitignore 是告诉 git 哪些文件是忽略提交的。

相关阅读

1
touch .gitignore  // 创建文件

如果要忽略的文件在创建gitigonre 文件前已经checked in,需要运行一下命令移除。

$ git rm --cached README.md

注: 执行完成后,要定位到 .gitignore 文件所在路径进行 push

撤销修改

git checkout -- file 丢弃工作区的修改,产生以下两种情况:

  • 修改后还未被放到暂存区,撤销修改到和版本库一样的状态

  • 修改后已经 add 到了暂存区,并且又做了修改。撤销为添加暂存区后的状态,然后使用 git reset HEAD <filename> 来撤销暂存区的修改。

以上都是本地还未 commit 的情况。如果已经 commit 但还未 push 到远程仓库,则需要使用 版本回退

change remote

使用 https 方式 clone 下来的代码在每次 pull 或者 push 时都会要求输入用户名和密码。为了解决这个问题,我们需要将代码的远程仓库地址 remote 改为 SSH。 具体实现如下:

https -> SSH

1
git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

SSH -> https

1
git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

git pull --rebase

在本地进行了多次修改并且事先没有 git pull 就直接 git push 时会被阻止。这种情况下就需要先 git pull 之后才能继续。

reference

[译] 何时 merge 与何时 rebase

Copyright © 2017 - 2018 空脑壳 All Rights Reserved.

冀ICP备17022284号